package com.situ.day1;

import org.junit.Test;

import java.lang.String;

public class HelloWorld {

    // 程序的入口方法
    // main  psvm
    public static void main(String[] args) {
        System.out.println("com.situ.day1.HelloWorld");
        // 数据类型 变量 = 23;
        // 在编程里面“=”不是判断相等的意思，是把右边的值赋值给左边的变量
        int num1 = 23;
        num1 = 28;
        // final：最终的意思，被final修饰的变量就是“常量”
        final int num2 = 34;
        // 常量被赋值之后就不能更改
        // Cannot assign(赋值) a value to final variable(变量) 'num2'
        // num2 = 12;
        double pi = 3.14;

        // byte b1 = 255;
        byte b1 = 127;
        byte b2 = -128;

        // char类型是2个字节
        char ch1 = 'a';// 97
        char ch2 = '中';
        System.out.println(ch1);
        System.out.println(ch2);
        // char ch3 = ch1 + 1;
        // ch1是char类型长度2个字节，默认的整数都是int类型长度是4个字节
        // 在java里面小的类型和大的类型做运算时候，小的类型会自动转换成大的类型
        // 97 + 1 = 98
        // char ch3 = 98; 会报错
        // 98是int类型，如果想转换成char类型，需要强制转换
        char ch3 = (char)(ch1 + 1);
        System.out.println(ch3);// b
        char ch4 = 'a' + 1; // b
        System.out.println(ch4);
        char ch5 = ch1 += 1; // b
        System.out.println(ch5);
    }

    // junit: java unit
    // 单元测试 public void 这个是固定的，而且不能有参数
    // Alt+Enter
    @Test
    public void test1() {
        // soutm
        System.out.println("Hello.test1");
        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b1);
    }

//    1、从小到大自动类型转换
//    2、从大到小需要强制类型转换，可能会丢失精度(装水的杯子大小不一样)
//    byte->short(char)->int->long->float->double
    @Test
    public void test2() {
        char ch1 = 'a';
        char ch2 = (char)(ch1 + 1);
        double d = 3.14;
        int num = (int)d;
        System.out.println(num);// 3
    }

    @Test
    public void test3() {
        int num1 = 3;
        int num2 = 5;
        int result1 = num1 + num2;
        System.out.println(result1);
        System.out.println(8 / 2);// 4
        System.out.println(8 % 2);// 0
        System.out.println(8 / 5);// 1
        System.out.println(8 % 5);// 3
    }

    @Test
    public void test4() {
        int i = 0;
        i++;// i = i + 1;   i += 1;
        System.out.println(i);// 1
        i--;// i = i - 1;   i -= 1;
        System.out.println(i);// 0
    }

    @Test
    public void test5() {
        int i = 1;
        ++i; // i++ 单独使用++放在前面和后面没有任何区别
        System.out.println(i);// 2
        System.out.println(i++);// 2
        System.out.println(i);// 3
    }

    @Test
    public void test6() {
        int i = 1;
        ++i; // i++ 单独使用++放在前面和后面没有任何区别
        System.out.println(i);// 2
        System.out.println(++i);// 3
        System.out.println(i);// 3
        int num = i++;
        System.out.println(num);// 4
    }

    @Test
    public void test7() {
        // 比较之后的结果只有两种情况：true、false，所以比较运算的结果是boolean类型
        System.out.println(3 >= 5);// false
        System.out.println(5 <= 10);// true

        int num1 = 40;
        int num2 = 470;
        boolean result1 = (num1 >= 60) || (num2 >= 400);
        System.out.println(result1);// true
        boolean result2 = (num1 >= 60) && (num2 >= 400);
        System.out.println(result2);// false
    }

    // 短路运算
    @Test
    public void test11() {
        int num1 = 3;
        int num2 = 5;
        // && 短路
        System.out.println(num1 < 0 && num1++ < num2);// false
        System.out.println(num1);// 3
        System.out.println(num2);// 5
        // || 短路
        System.out.println(num1 > 0 || num1++ < num2);// true
        System.out.println(num1);// 3
        System.out.println(num2);// 5
    }

}
